/*
	Cross Platform Core Code.

	Copyright(R) 2012-2015 Sumscope.
	All rights reserved.

*/

#if	!defined( __SSMSGSTRUCT_H__ )
#define	__SSMSGSTRUCT_H__
#include <string>
#include <string.h>


#ifdef WIN32
#pragma pack(push) 
#pragma pack(1)
#endif

#define	SSMSGCONTROL_MAX_STRLEN		4096
#define SSMSGCONTROL_MAX_PATH		260

#define	SSMSGCONTROL_NETTYPE_HTTP		0
#define SSMSGCONTROL_NETTYPE_TCP		1
#define	ASKDATA_CODE_LEN		40

#define		RANDOM_MAXiMUM			100000
#define		MSG_RESPONSE_DATA		WM_USER+6666
#define		MSG_DATA_CHANGED		WM_USER+6667

#define	WM_APP_STKRECEIVER_CONNECTSERVER	WM_APP+1
#define	WM_APP_STKRECEIVER_DISCONNECTSERVER	WM_APP+2
#define	WM_APP_STKRECEIVER_INIT				WM_APP+3
#define	WM_APP_STKRECEIVER_SETUP			WM_APP+4
#define	WM_APP_STKRECEIVER_QUIT				WM_APP+5
#define	WM_APP_STKRECEIVER_DATA				WM_APP+6
#define	WM_APP_STKRECEIVER_ALARM			WM_APP+7
#define	WM_APP_STKRECEIVER_INFO				WM_APP+8	// 系统信息
#define	WM_APP_STKRECEIVER_YXDATA			WM_APP+9	// YX接收消息

#define	WM_APP_REFRECEIVER_GRDATA			WM_APP+12
#define	WM_APP_REFRECEIVER_DATA				WM_APP+13
#define	WM_APP_SET_CUR_BOND_DATA			WM_APP+31
#define WM_APP_ACK_QUEUE_UPDATED			WM_APP+32
#define WM_APP_NETSPEED_TEST				WM_APP+33
#define WM_APP_PROXY_TEST					WM_APP+34

#define	WM_USER_STARTUP_PROGRESS			WM_APP+100
#define	WM_USER_STARTUP_CLOSE				WM_APP+101
#define WM_USER_STARTUP_INFO				WM_APP+102
//#define WM_USER_STARTUP_QUIT				WM_APP+102//关闭

namespace qb
{

	enum SSRequsetMsgTypes {
		SSReqType_None = 0x00,
		SSReqType_GetString = 0x01,
		SSReqType_DownLoadFile = 0x02,
		SSReqType_GetPic = 0x03,
		SSReqType_Message = 0x04,
		SSReqType_Max = 0x04,
	};

	enum HTTP_USER_ERROR
	{
		USER_STATUS_OK = 0,
		INVALID_HTTP_URL = 1,
		STRING_IS_NULL = 2,
		UNINITIALIZED = 3,
		CONNECTION_FAILED = 4,
		INVALID_HTTP_MSG = 5,
		HTTP_STATUS_SUCCESS = 200,
		HTTP_300 = 300,
		HTTP_400 = 400,
		HTTP_500 = 500,
		UNKNOWN = 999
	};

	// 展示层请求包结构
	typedef struct ssyrlrequestmsg_t
	{
		int		m_MsgType;										// 消息类型，文件下载、消息请求、图片请求等，见SSRequsetMsgTypes
		int		m_FuncID;										// 功能号
		long	m_RequestID;									// 请求编号，每次请求唯一
		char	m_szURL[SSMSGCONTROL_MAX_STRLEN];				// 请求URL
		char	m_szDesFile[SSMSGCONTROL_MAX_PATH];				// 如果是下载文件的本地保存名称，含目录
		int		m_Reserved;										// 保留字段
	} SSURLRequestMsg, * PSSURLRequestMsg;

	// 展示层请求包结构
	typedef struct ssrequestmsg_t
	{
		int		m_MsgType;										// 消息类型，文件下载、消息请求、图片请求等，见SSRequsetMsgTypes
		int		m_FuncID;										// 功能号
		int32_t	m_RequestID;									// 请求编号，每次请求唯一
		void* m_pRequest;										// 请求结构内容									
		char	m_szDesFile[SSMSGCONTROL_MAX_PATH];				// 如果是下载文件的本地保存名称，含目录
		int		m_Reserved;										// 保留字段
		int     m_Total;                                        // 分包字段:包的总数
		int     m_CurIdx;                                       // 分包字段:当前包的序号 base0

		ssrequestmsg_t()
			:m_Total(1)
			, m_CurIdx(0)
			, m_RequestID(0)
			, m_MsgType(0)
			, m_FuncID(0)
			, m_pRequest(NULL)
			, m_Reserved(0)
		{
			memset(m_szDesFile, 0, sizeof(m_szDesFile));
			m_MsgType = SSReqType_Message;
		}

	} SSRequestMsg, * PSSRequestMsg;

	// 数据层应答包结构
	typedef struct ssact_t {
		int		m_MsgType;						// 消息类型
		int		m_FuncID;						// 请求类型
		long	m_RequestID;					// 请求编号，每次请求唯一
		int		m_Count;						// 数据数量
		int     m_Index;						// 第几个包
		void* m_pRet;							// 响应结构指针
		int		m_ErrorCode;					// 错误代码
		char	m_Desc[64];						// 错误信息
		int		m_IsReceving;					// 是否正在收，1，表示正在收，还有包；0，表示已经是最后的包了。
		ssact_t() {
			memset(this, 0, sizeof(ssact_t));
		};

	} SSAckMsg, * PSSAckMsg;

	typedef struct tagAskData
	{
		void*	hWnd;
		int		nType;
		char	szCode[ASKDATA_CODE_LEN];
		char	szParameter[128];	//参数，用于应答时识别
		void* m_pReq;				//需要保留的请求参数
		int		nIndex;
		bool    isSendMessage;		//如果是sendMessage 过来不需要删内存，POST过来需要删内存
	}AskData;

}

#ifdef WIN32
#pragma pack(pop)
#endif

#endif	//__SSMSGSTRUCT_H__

